Applications running on different network computers often share information. For example, an application running at one computer may feed stock market data to applications at remote computers. To share information, applications often use a messaging system. A messaging system handles a wide variety of tasks associated with application and network communication. These systems often ease application development by shielding programmers from the details of message handling.
One type of messaging system is known as “message-oriented middleware.” Essentially, message-oriented middleware systems receive messages from one application and store these messages until retrieved by another application. This scheme can free applications to perform other operations until they choose to receive a message.
Some messages do not require reliable transmission. For example, the loss of a message containing a stock quote may not be of particular concern if other messages with the quote quickly follow. More critical data exchanges, however, may require greater reliability. Thus, many messaging systems support “guaranteed messages” that the messaging system promises not to lose. Typically, after receiving a guaranteed message, message-oriented middleware systems transmit an acknowledgment message to the sending application indicating that from then on, the system will not lose the message. To provide this guarantee, many messaging systems save guaranteed messages in persistent storage such as a hard disk or other non-volatile storage medium. Thus, even in the event of a messaging system problem, such as a system crash, the system can still access and deliver the guaranteed messages when the system resumes operation.